dofile "lib/radical.lua"

function tile(s) 
  return const.path.gfx.."game/med/"..s..".jpg"; 
end

function cm_tile(s) 
  return const.path.gfx.."game/common/"..s..".jpg"; 
end

function dxml(s)
  return const.path.dlg.."3-inter/clinic/"..s..".xml";
end

main = engine.main {
   start        = chain_ {
                     episode_("3-clinic")
                    ,musplayer_("clinic_player")
                    ,walk_("hall")
                  }
  ,finish       = gamefile_("3-inter/work.lua")
}

clinic = engine.state {
   _nodoctor    = false --Kate can see that doctor is not in his room
  ,_endcoridor  = false --Kate walked to the end of the coridor
  ,_umbrella    = false --Umbrella is broken
  ,_alldone     = false --Kate fixed an umbrella
}

clinic_player = musplayer.player {
   mus("hospitalsounds"):inside("hall"):loop()
  ,sfx("knock"):inside("hall_knock_scene1"):always()
  ,sfx("knock"):inside("hall_knock_scene3"):always()
  ,mute():fade(3000,3000):inside("tikhonov_anim1")
  ,sfx("note"):inside("trans1")
  ,mus("rain"):inside("trans2"):loop()
  ,mus("perversion"):inside("finita_bad")
  ,mus("perversion"):inside("finita_good")
}

hall = scene {
   tile         = tile "wall1"
  ,bounds       = { 75, nil, 760 }
  ,dsc          = [[Сегодня в поликлинике целая толпа людей, а вокруг кабинета Тихонова собралась огромная очередь.
                    Все шумно о чем-то переговариваются, точно пришли не в поликлинику, а на запрещенный митинг.
                  ]]
  ,obj          = { "hall_door1", "hall_door2", "hall_visitor" }
  ,nav          = {
                    down = vw("В коридор", "coridor1")
                  }
}

hall_door1 = staticitem {
   dsc          = "Дверь в кабинет доктора Тихонова слегка {приоткрыта}."
  ,act          = walk_("hall_door_scene")
  ,cnd          = not_("clinic._endcoridor")
  ,showonce     = true
}

hall_door2 = staticitem {
   dsc          = "{Дверь} в кабинет доктора Тихонова на сей раз плотно закрыта."
  ,act          = [[Катя подходит к двери. Возможно, доктор Тихонов уже вернулся, а она не заметила его, пока ходила по коридору? 
                    Рука ее уже тянется к дверной ручке, но потом она решает, что лучше сначала {hall_knock1|постучать}.]]
  ,cnd          = if_("clinic._endcoridor and not clinic._knock")
}

hall_knock1 = staticitem {
  act           = walk_("hall_knock_scene1")
}

hall_knock2 = staticitem {
  act           = walk_("hall_knock_scene3")
}

hall_knock_scene1 = pause {
   time         = 3000
  ,next         = "hall_knock_scene2"
}

hall_knock_scene2 = scene {
   bounds       = { 280, 260, 480 }
  ,dsc          = "Никто не отвечает. Можно попробовать {hall_knock2|постучать} еще раз."
}

hall_knock_scene3 = pause {
   time         = 3000
  ,next         = "hall_knock_dlg"
}

hall_knock_dlg = dialog {
   bounds       = { 260, 220, 480 }
  ,dsc          = "-- Девушка! Тут вообще-то очередь!"
  ,dlg          = dxml "knock"
}

hall_door_scene = cutscene {
   bounds       = { 260, 260, 480 }
  ,enter        = set_("clinic._nodoctor")
  ,dsc          = [[Катя осторожно заглянула в кабинет. Внутри никого не оказалось -- доктора Тихонова нет на месте.]]
  ,next         = "hall"
}

hall_visitor = staticitem {
   dsc          = "Один из посетителей, {мужчина} средних лет, как-то нервно расхаживает перед кабинетом, постоянно поглядывая на свои наручные часы."
  ,act          = walk_("hall_visitor_dlg")
}

hall_visitor_dlg = dialog {
   tile         = tile "wall1"
  ,bounds       = { 75, nil, 760 }
  ,dlg          = dxml "visitor"
}

coridor1 = scene {
   tile         = tile "wall3"
  ,bounds       = { 130, nil, 700 }
  ,dsc          = [[В поликлинике сегодня и правда очень шумно и людно. Обычно так бывает в конце года, когда у всех
                    заканчивается страховка -- но ведь сейчас только начало лета.^^]]
  ,obj          = { "coridor1_info1", "coridor1_info2", "coridor1_event" }
  ,nav          = {
                     up = vw("В конец коридора", "coridor2")
                    ,down = vw("К кабинету доктора Тихонова", "hall")
                  }
}

coridor1_info1 = staticitem {
   dsc          = "На доске справа все еще висит {реклама} онкоскринига,"
  ,act          = walk_("coridor1_info1_scene")
  ,showonce     = true
}

coridor1_info1_scene = scene {
   bounds       = { 260, 160, 480 }
  ,dsc          = [[УВАЖАЕМЫЕ ПАЦИЕНТЫ!^^
                    С целью раннего выяления онкологических заболеваний мы рекомендуем вам раз в год проходить
                    платное профилактическое обследование в нашей поликлинике (онкоскрининг). Не пренебрегайте
                    своим здоровьев, помните, что на ранних стадиях рак поддается лечению в 80 процентах случаев.^^
                    Детали по программе профилактического обследования вы можете узнать по телефону: 412-0533.^^
                    Обследование проводится в смотровом кабинет №204 поликлиники №212 с 8-00 до 16-00 с понедельника
                    по четверг.]]
  ,nav          = {
                    down = vw("Отойти", "coridor1")
                  }
}

coridor1_info2 = staticitem {
   dsc          = choose_ {
                     ["default"] = "однако рядом с ним появилось и новое какое-то {объявление}."
                    ,["coridor1_info2._seen"] = "однако рядом с ним появилось и новое объявление."
                  }
  ,act          = walk_("coridor1_info2_scene")
}

coridor1_info2_scene = scene {
   bounds       = { 260, 180, 480 }
  ,dsc          = [[УВАЖАЕМЫЕ ПАЦИЕНТЫ!^^
                    В связи с большим количество желающих пройти процедуру онкоскрининга были введены следующие правила:
                    ^-- К обследованию допускаются только лица, прописанные в северо-западном округе
                    ^-- К обследованию допускаются только лица, имеющие действующую страховку класса 3B или выше, истекающую
                    не раньше 1 января 2008 года
                    ^-- На обследование нужно записываться не позднее, чем за один календарный месяц. Запись на обследование
                    производится по телефону: 412-0533.]]
  ,nav          = {
                    down = vw("Отойти", "coridor1")
                  }
}

coridor1_event = staticitem {
   dsc          = "^^Впереди хлопнула дверь, и в коридоре показалась знакомая {фигура} в белом халате."
  ,act          = "Может быть, это он? Нужно поспешить."
  ,showonce     = true
  ,cnd          = if_("clinic._knock")
}

coridor2 = scene {
   tile         = tile "wall2"
  ,bounds       = { 75, nil, 760 }
  ,enter        = set_("clinic._endcoridor")
  ,dsc          = choose_ {
                    ["not clinic._knock"] = "Катя думает, что не стоит ей далеко отходить от кабинета. Вдруг доктор скоро появится?"
                  }
  ,alwaysdsc    = true
  ,obj          = { "tikhonov" }
  ,nav          = {
                     up = vw("В конец коридора"):cnd("false", "Лучше не разгуливать по всему зданию, а то можно упустить доктора Тихонова.")
                    ,down = vw("К кабинету доктора Тихонова", "coridor1")
                  }
}

tikhonov = staticitem {
   dsc          = "Это доктор {Тихонов}! Он спешно идет к лифту. Это может быть единственный шанс Кати."
  ,act          = walk_("tikhonov_anim1")
  ,cnd          = if_("clinic._knock")
}

tikhonov_anim1 = slideright {
   tile         = tile "doctor"
  ,x            = 100
  ,y            = 180
  ,endx         = 160
  ,fps          = 20
  ,step         = 4
  ,next         = "tikhonov_dlg"
}

tikhonov_dlg = dialog {
   tile         = { tile "doctor", 160, 200 }
  ,bounds       = { 360, 240, 500 }
  ,dlg          = dxml "tikhonov"
}

tikhonov_anim2 = slidedown {
   tile         = tile "hands"
  ,x            = 0
  ,starty       = -148
  ,y            = 0
  ,fps          = 20
  ,step         = 4
  ,next         = "tikhonov_dlg2"
}

tikhonov_dlg2 = dialog {
   tile         = { tile "hands", 0, 20 }
  ,bounds       = { nil, 240, 900 }
  ,dsc          = "-- Катя, мне правда жаль, что я начал заниматься вашим делом так поздно, и у меня просто... просто не было ни времени, ни возможности помочь вашему отцу. Но, естественно, я сообщил об этом случае. Это просто мой долг."
  ,dlg          = dxml "tikhonov2"
}

trans1 = pause {
   time         = 1500
  ,next         = "trans2"
}

trans2 = chapter(3, "Дознание", "entrance")

entrance = scene {
   tile         = tile "column2"
  ,bounds       = { 140, nil, 660 }
  ,dsc          = [[На улице снова идет дождь. Катя стоит под высоким навесом у хода в поликлинику, однако порывистый, почти штормовой ветер все 
                    равно обдает ее холодным водяными брызгами. Небо почти черное от туч, хотя еще только близится полдень, и кажется, что этот
                    дождь не закончится никогда.
                    ^Вода в лужах пенится и бурлит, точно вскипает. Катя вспоминает, как отец однажды рассказывал ей, что это особая примета --
                    если в лужах появляются пузыри, значит дождь завершится еще скоро. Ей хочется плакать.^^]]
  ,alwaysdsc    = true
  ,obj          = { "entrance_info", "umbrella_hands", "entrance_go", "umbrella_on" }
  ,nav          = {
                     up = vw("Идти к дому", "exit_hub"):cnd("clinic._umbrella", "Надо бы сначала раскрыть зонт.")
                    ,down = vw("Вернуться в поликлинику"):cnd("false", "Делать там больше нечего.")
                  }
}

umbrella_hands = staticitem {
   dsc          = "Катя держит в руках свой старенький {зонт}."
  ,act          = chain_ { take_("umbrella"), set_("clinic._umbrella"), "Что-то, видимо, сломалось. Катя нажимает на тугую кнопку на ручке, однако зонт никак не хочет открываться." }
  ,cnd          = not_("clinic._umbrella")
}

entrance_info = staticitem {
   dsc          = "На {колонне}, рядом с которой стоит Катя, криво наклеено какое-то объявление."
  ,act          = "Судя по следам, здесь раньше было много объявлений, но сейчас осталось только одно.^Частный доктор. Лечение на дому. Качественно и недорого!^Все телефоны оторваны, хотя доктор даже не написал свою фамилию."
}

entrance_go = staticitem {
   dsc          = "Катя уже готова {пойти} домой так, с нераскрытым зонтом. Ей почему-то не хочется оставаться здесь больше ни на минуту. Все равно, если она намокнет. Это всего лишь дождь."
  ,act          = walk_("")
  ,cnd          = if_("clinic._umbrella and not clinic._alldone")
}

umbrella_on = staticitem {
   dsc          = "Катя стоит под раскрытым зонтом."
  ,cnd          = if_("clinic._alldone")
}

umbrella = item {
   nam          = "Зонт"
  ,ico          = ico "umbrella"
  ,img          = ico "umbrella-use"
  ,use          = chooseuse_ {
                     ["default"] = "Вряд ли стоит это делать."
                    ,["entrance_info"] = chain_ { sound_("hit"), set_("clinic._alldone"), drop_("umbrella"), "Катя несколько раз ударила зонтом по колонне, потом попробовала раскрыть его снова. Удивительно, но зонт и правда раскрылся." }
                  }
}

exit_hub = engine.hub {
  enter         = choose_ {
                     ["default"] = walkblack2_("finita_bad")
                    ,["clinic._alldone"] = walkblack2_("finita_good")
                  }
}

function custscene_slider(o)
  local ret = slideright(o);
  ret.bounds = o.bounds;
  ret._level = 1;
  ret.drawtext = function(s)
    local bounds = nvl(rcall(s.bounds,s),{});
    local x,y,w = nvl(bounds[1],20),nvl(bounds[2],40),nvl(bounds[3],800);
    drawing.clean(s.pic, x, y - 50, w, 600);
    local txt = o.arr[s._level];
    if txt ~= nil then
      drawing.render_multiline_text(s, s.pic, txt, const.font, 14, const.textcolor, x, y, w, true, 20);
    end
  end
  ret.ondraw = ret.drawtext;
  ret.onclick = function(s)
    ret._level = s._level + 1;
    if ret._level <= table.len(o.arr) then
      s:drawtext();
    else
      ret._level = 1;
      walk(o.gonext);
    end
  end
  return ret;
end

dsc_good        = [[Катя все еще не могла поверить в то, что все это происходит в действительности.
                    Как будто она просто забыла вечером закрыть окно, и гнетущий шум ночного ливня, холодный ветер и запах дождевой воды перевернули весь
                    мир ее сновидений, превратив обычный бессвязный сон, исчезающий из памяти в первые секунды после пробуждения, в этот черный
                    бесконечный кошмар, от которого она никак не может освободиться.^
                    Осталось совсем немного, предрассветная мгла расстает над горизонтом, ветер хлопнет створкой окна -- и она проснется, выйдет в гостиную,
                    а там... ARR]]
dsc_bad         = [[Катя пошла в дождь. Вокруг было так темно, что казалось, будто бы уже наступила глубокая ночь. Которая уже никогда не завершится.^
                    Кате приходилось идти против ветра, вся одежда ее быстро промокла, и вскоре ее стало бить от озноба. Вокруг ее не было души. Вся улица
                    была оглушающе пустой, точно Катя перепутала в ненастных сумерках дорогу и забрела в старый город, перешла через границу мира живых. ARR]]

finita_bad = custscene_slider {
   tile         = cm_tile "clouds"
  ,y            = 40
  ,x            = -500
  ,endx         = 0
  ,step         = 1
  ,fps          = 10
  ,bounds       = { nil, 360, 900 }
  ,arr          = { dsc_bad, dsc_good }
  ,gonext       = "main"
}

finita_good = custscene_slider {
   tile         = cm_tile "clouds"
  ,y            = 40
  ,x            = -500
  ,endx         = 0
  ,step         = 1
  ,fps          = 10
  ,bounds       = { nil, 360, 900 }
  ,arr          = { dsc_good }
  ,gonext       = "main"
}
